package com.bigdata.utils;

import org.openjdk.jol.info.ClassLayout;
import org.openjdk.jol.info.GraphLayout;
import org.openjdk.jol.layouters.CurrentLayouter;
import org.openjdk.jol.layouters.Layouter;
import org.openjdk.jol.vm.VM;

import java.io.PrintWriter;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Random;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

/**
 * @ClassNameJolUtil
 * @Description
 * @Author lly
 * @Date2020/3/8 14:42
 * @Version V1.0
 **/
public class JolUtil {
    public static String toFullBinaryString(int num)//将整数num转化为32位的二进制数
    {
        char[] chs = new char[Integer.SIZE];
        for (int i = 0; i < Integer.SIZE; i++) {
            int o = ((num >> i) & 1);
            int k = '9';
            char f = (char) (o + '0');
            chs[Integer.SIZE - 1 - i] = (char) (o + '0');
        }
        return new String(chs);
    }

    public static class A {
        Object a;
        Object b;
    }

    public static void main(String[] args) {
        //   Layouter l;

        //   l = new CurrentLayouter();
        //  System.out.println("***** " + l);
        // System.out.println(ClassLayout.parseClass(A.class, l).toPrintable());
//        System.out.println(VM.current().details());
//
//        PrintWriter pw = new PrintWriter(System.out, true);
//
//        Integer[] arr = new Integer[10];
//        for (int i = 0; i < 10; i++) {
//            arr[i] = new Integer(i);
//        }
//
//        String last = null;
//        for (int c = 0; c < 100; c++) {
//            String current = GraphLayout.parseInstance((Object) arr).toPrintable();
//
//            if (last == null || !last.equalsIgnoreCase(current)) {
//                pw.println(current);
//                last = current;
//            }
//
//            System.gc();
//        }
//
//        pw.close();

        new Integer(111);
        Integer.valueOf(111);
        String s = "ssss"+"sssss";
        //System.out.println(VM.current().details());
      //  System.out.println(ClassLayout.parseInstance(new char[0]).toPrintable());
        //查看对象外部信息
        System.out.println(GraphLayout.parseInstance(s).toPrintable());

        //获取对象总大小
        System.out.println("size : " + GraphLayout.parseInstance(s).totalSize());
        //System.out.println(ClassLayout.parseInstance(s).toPrintable());
       // System.out.println(ClassLayout.parseClass(String.class).toPrintable());
//        int f = Integer.MAX_VALUE;
//        String h = toFullBinaryString(f);
//        BigDecimal bigDecimal = new BigDecimal(10);
//        System.out.println(h);
//        System.out.println(Integer.toBinaryString(f));
//        System.out.println(h.length());
//        System.out.printf("%#x", f);// "d"表示输出带有十六进制标志的整数。
//        System.out.println(Integer.toHexString(f));
//        int k = f >>> 2;
//        System.out.println(Integer.toBinaryString(-2));
//        System.out.println(Integer.toBinaryString(f));
//        System.out.println(Integer.toBinaryString(k));

//        int n[] = {};
//        Arrays.binarySearch(n, 4);
//        // 每100毫秒创建100线程，每个线程创建一个1M的对象，即每100ms申请100M堆空间
//        Executors.newScheduledThreadPool(1).scheduleAtFixedRate(() -> {
//            for (int i = 0; i < 100; i++) {
//                new Thread(() -> {
//                    try {
//                        //  申请1M
//                        byte[] temp = new byte[1024 * 1024];
//                        Thread.sleep(new Random().nextInt(1000)); // 随机睡眠1秒以内
//                    } catch (InterruptedException e) {
//                        e.printStackTrace();
//                    }
//                }).start();
//            }
//        }, 1000, 100, TimeUnit.MILLISECONDS);

    }
}